home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_b / superk.act < prev    next >
Text File  |  1995-04-22  |  3KB  |  110 lines

  1. ;SUPERK.ACT
  2. ;Bill Aycock 73067,220
  3. ;Get exten for pfkey file from cmd line
  4. ;then have SuperKEY! load desired file.
  5. ;For DOS XL only!
  6. ;Compile this and append it to the end
  7. ;of SUPKEY.COM.
  8. ;SUPKEY is Keith Ledbetter's great
  9. ;SuperKEY! macro processor for XL/XEs.
  10. ;(But don't bug him with questions
  11. ; about this!)
  12.  
  13. SET $E  =$4000
  14. SET $491=$4000
  15.  
  16. ;INCLUDE "D:SYSLIB.ACT"
  17.  
  18. ;GETARGS.ACT
  19. ;GetArgs - Pull arguments from CP
  20. ;   buffer into temporary area and
  21. ;   return the NUMBER of arguments
  22. ;   as the function value and the
  23. ;   ADDRESSES of strings containing
  24. ;   the arguments in the CARD ARRAY
  25. ;   argv.
  26. ;REMEMBER:
  27. ;  The first argument (=argv(0)) is
  28. ;    the name of the extrinsic command!
  29. ;  The CP buffer is only 60 bytes long,
  30. ;    so there are 29 args max.
  31. ;  The default drive spec (in ASCII) is
  32. ;    stored at (dosvec^ + 7)
  33.  
  34.  
  35. BYTE FUNC GetArgs( CARD ARRAY argV  BYTE maxArgs )
  36.  BYTE nArgs=[0]  ; num args encountered
  37.      ,bufOffset=[0] ; CP buffer offset
  38.      ,argPtr=[0] ; arg  "       "
  39.      ,curArg=[0] ; offset of start of this arg
  40.      ,argLen=[0] ; length of this arg
  41.      ,c=[0]      ; temp character
  42.  BYTE ARRAY argspace( 80 )= ;clear some space
  43.   [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  44.    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
  45.    ;space is CMD(=ARG0) ARG1 ARG2... ARG(MAXARGS)
  46.  BYTE POINTER cmdBuf=[0]
  47.  CARD dosVec = 10
  48.  nArgs = 0
  49.  argPtr = 0
  50.  bufOffset = $3F
  51.  cmdBuf = dosVec
  52.  IF maxArgs>29 THEN maxArgs=29 FI
  53.  DO  ;skip leading spaces
  54.      WHILE cmdBuf(bufOffset)=$20
  55.      DO bufOffset ==+ 1 OD
  56.      ;check for end of buf (60 + $3F offset)
  57.      IF bufOffset>123 THEN EXIT FI
  58.      ;save start of this argument
  59.      curArg = argPtr
  60.      argPtr ==+ 1
  61.      argLen = 0
  62.      ;copy chrs up to whitespc or comma
  63.      DO  c = cmdBuf( bufOffset )
  64.          IF (c=' )
  65.             OR (c=$9B)
  66.             OR (c=0)
  67.             OR (c=',)
  68.            THEN EXIT
  69.          FI
  70.          argspace( argPtr ) = c
  71.          bufOffset ==+ 1
  72.          argPtr ==+ 1
  73.          argLen ==+ 1
  74.      OD
  75.      ;If this arg empty, at end of arg list
  76.      IF argLen=0 THEN EXIT FI
  77.      ;Now add argument to list
  78.      argspace( curArg ) = argLen
  79.      argV( nArgs ) = argspace+curArg
  80.      nArgs ==+ 1
  81.    UNTIL nArgs >= maxArgs
  82.  OD
  83. RETURN( nArgs )
  84.  
  85. ;-------------------------------------
  86.  
  87. PROC ChangeDAT(BYTE ARRAY desired,at)
  88.  BYTE i
  89.  FOR i=1 TO desired^
  90.  DO at^=desired(i) at==+1 OD
  91. RETURN
  92.  
  93.  
  94. PROC FixAndGo()
  95.  CARD ARRAY argaddrs(4)
  96.  BYTE POINTER exten
  97.  GetArgs(argaddrs,3)
  98.  exten=argaddrs(1)
  99.  IF exten^=0       ;use .DAT as default
  100.    THEN RETURN
  101.  FI
  102.  IF exten^>3            ;exten too long
  103.    THEN exten^=3
  104.  FI
  105.  ChangeDAT(exten,$53CA)   ;file name
  106.  ChangeDAT(exten,$5498)   ;not-ok msg
  107. RETURN
  108. ;---end of SUPERK.ACT-----------------
  109.  
  110.